package com.java.datastructures.singlelinkedlist;

import javax.persistence.Entity;

/**
 * 一个节点
 * @author wangning
 * @create 2021-06-01 21:11
 */
public class Node {
	//节点内容
	int data;
	//下一个节点
	Node next;
	public Node(int data) {
		this.data = data;
	}
	//为节点追加节点
	public Node append(Node node) {
		//如果想要从node1无限追加，就不能这样写了
		//this.next = node;
		//当前节点
		Node currentNode = this;
		//循环向后找
		while (true) {
			//取出下一个节点
			Node nextNode = currentNode.next;
			//如果下一个节点为 null，当前节点已经是最后一个节点
			if (nextNode == null) {
				break;
			}
			//赋给当前节点
			currentNode = nextNode;
		}
		//把需要追加的节点追加为找到的当前节点的写一个节点
		currentNode.next = node;
		return this;
	}

	//获取下一个节点
	public Node next() {

		return this.next;

	}

	//获取节点中的数据
	public int getData() {
		return this.data;
	}

	//当前节点是否是最后一个节点
	public boolean isLast() {
		return next == null;
	}

	//删除下一个节点
	public void removeNext() {
		//先取出下下一个节点
		Node newNext = this.next.next;
		//把下下一个节点设置为当前节点的写一个节点，这样就完成了删除
		this.next = newNext;
	}

	//显示所有节点信息
	public void show() {
		Node currentNode = this;
		while (true) {
			System.out.print(currentNode.data + " ");
			//取出下一个节点
			currentNode = currentNode.next;
			//如果是最后一个节点
			if(currentNode == null) {
				break;
			}
		}
	}

	//插入一个节点作为当前节点的下一个节点，因为是一个单链表，所以我们只能插入到后面
	public void after(Node node) {
		//取出下一个节点，作为下下一个节点
		Node nextNext = next;
		//把新节点作为当前节点的下一个节点
		this.next = node;
		//把下下一个节点设置为新节点的下一个节点
		next.next = nextNext;
	}


}
